"""
一、命名空间(NameSpace)：
    概念：命名空间就是名字和对象的映射。
        相当于起作用的范围。
    # 1801 班的  张三
    # 1802 班的  张三
    # 班级 就相当于一个 命名空间

    规则：LEGB-rule
        L：local。局部的。比如函数/方法内部

        E：enclosing。封闭的。内层函数，可以搜索外层函数的命名空间

        G：Global。全局的。

        B：Built- in。内置。

二、作用域(scope)
    变量所起作用的范围。文本域
    1.局部变量：在函数里声明的变量。只能够在函数内部使用。
        不同的函数，即使局部变量名相同，也互不影响。

        局部变量的生命周期：变量从创建到销毁的生命周期
            局部变量：在函数调用的时候才会创建，当函数执行完毕后，局部变量被会被系统回收。销毁。

    2.全局变量：在函数外声明变量(没有在函数内部)，所有的函数都可以使用该全局变量。
        声明：全局变量的声明，在函数的调用前。

    3.访问外部函数的变量：非局部，也非全局
"""

# 在 全文件中可以访问  全局变量 Global
a = 11

print(a)


def test1():
    b = 22  # 在函数里边的变量, 局部变量  local
    print('woshi test1 :', a)
    print('b', b)

    def inner():
        c = 33  # enclosing
        print(b, '-------')
        print('c', c)

    inner()


test1()

# len()  系统内置的命名空间  Built- in

# 系统查找一个变量的时候,如何查找?
# LEGB-rule

print('*' * 20)
a = 1
print('gloal', a)


def test2():
    # a = 2
    print(a)

    def inner():
        # a = 3
        print('inner', a)

    inner()


test2()
